home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 46 / Amiga Format CD46 (1999-10-20)(Future Publishing)(GB)[!][issue 1999-12].iso / -serious- / programming / other / tandem / support / ssxref_make.asm < prev    next >
Assembly Source File  |  1999-09-06  |  4KB  |  203 lines

  1. * ssxref_make.asm  v. 0.09  25.2.97
  2.  
  3.  bra Cold                                ;*** must be run from CLI ***
  4.  
  5. infile: dc.b 'Support/FD3.1',0           ;*** paths relative to CD of input
  6. outfile: dc.b 'Support/ssxref.asm',0     ;*** and output files
  7.  
  8. extras:                                  ;*** supplement infile here
  9.  dc.b '_AbsExecBase: EQU $00000004',$0A
  10.  
  11. delim: dc.b 0
  12.  ds.w 0
  13.  
  14. _AbsExecBase equ $00000004
  15. _LVOOpenLibrary equ $FFFFFDD8
  16. _LVOCloseLibrary equ $FFFFFE62
  17. _LVOAllocMem: equ $FFFFFF3A
  18. _LVOFreeMem: equ $FFFFFF2E
  19. _LVOOpen: equ $FFFFFFE2
  20. _LVOClose: equ $FFFFFFDC
  21. _LVORead: equ $FFFFFFD6
  22. _LVOWrite: equ $FFFFFFD0
  23.  
  24. * input/output buffer
  25. memory: ds.l 1
  26.  
  27. * system information
  28. dosname: dc.b 'dos.library',0
  29.  
  30. * diskfile data
  31. handle: ds.l 1 ;file handle during i/o
  32.  
  33. * allocmem,open dos library
  34. Cold:
  35.  move.l _AbsExecBase,a6 ;allocate memory
  36.  move.l #200000,d0
  37.  moveq #1,d1
  38.  jsr _LVOAllocMem(a6)
  39.  move.l d0,memory
  40.  beq.s Co_quit ;go if can't
  41.  lea dosname,a1
  42.  clr.l d0
  43.  jsr _LVOOpenLibrary(a6) ;open dos
  44.  tst.l d0
  45.  beq.s Co_free
  46.  move.l d0,a6 ;a6=dosbase
  47.  bsr Warm
  48.  move.l a6,a1
  49.  move.l _AbsExecBase,a6
  50.  jsr _LVOCloseLibrary(a6) ;close dos
  51. Co_free:
  52.  move.l memory,a1
  53.  move.l #200000,d0
  54.  jsr _LVOFreeMem(a6) ;free memory
  55. Co_quit:
  56.  rts     ;exit
  57.  
  58. * input & output a6=dosbase
  59. Warm:
  60.  move.l #infile,d1 ;open infile
  61.  move.l #1005,d2
  62.  jsr _LVOOpen(a6)
  63.  move.l d0,d1
  64.  beq.s Wm_quit     ;go if can't
  65.  move.l d1,-(a7)
  66.  move.l memory,d2
  67.  add.l #100000,d2   ;load at memory+100000
  68.  move.l #100000,d3
  69.  jsr _LVORead(a6)
  70.  move.l (a7)+,d1
  71.  move.l d0,-(a7)
  72.  jsr _LVOClose(a6)   ;close infile
  73.  move.l (a7)+,d6
  74.  ble.s Wm_quit
  75.  add.l d2,d6         ;d2=infile d6=infile top
  76.  bsr Calc
  77.  movem.l d2-d3,-(a7) ;save outfile data
  78.  move.l #outfile,d1
  79.  move.l #1006,d2
  80.  jsr _LVOOpen(a6)    ;open outfile
  81.  movem.l (a7)+,d2-d3
  82.  move.l d0,d1
  83.  beq.s Wm_quit      ;go if can''t open
  84.  move.l d1,-(a7)
  85.  jsr _LVOWrite(a6)   ;send outfile
  86.  move.l (a7)+,d1
  87.  jsr _LVOClose(a6)   ;close outfile
  88. Wm_quit:
  89.  rts
  90.  
  91. * prepare output data  d2=outfile d6=outfile top (send d2,d3 for Write)
  92. Calc:
  93.  move.l d2,a0  ;a0=infile
  94.  lea extras,a2 ;transfer extras
  95.  lea delim,a3
  96.  move.l memory,a1 ;a1=outfile
  97.  move.l a1,d2  ;d2=outfile bot
  98. Cc_tfr1:
  99.  move.b (a2)+,(a1)+
  100.  cmp.l a2,a3
  101.  bne Cc_tfr1
  102.  clr.l d5      ;d5=bias
  103.  clr.l d4      ;d4=0 if public
  104. Cc_item:
  105.  cmp.l d6,a0
  106.  bge Cc_wrap ;-> if eof
  107. Cc_chr1:
  108.  cmp.b #33,(a0)  ;skip null lines, of lines starting with a space
  109.  bcs.s Cc_slof
  110.  cmp.b #'#',(a0) ;-> if #
  111.  beq.s Cc_hash
  112.  cmp.b #'*',(a0) ;slof if *
  113.  bne Cc_got      ;else, a libname
  114. Cc_slof:
  115.  cmp.b #$0A,(a0)+ ;skip rest of inline
  116.  bne Cc_slof
  117.  bra Cc_item
  118. Cc_hash:
  119.  addq.l #1,a0
  120.  cmp.b #'#',(a0)+ ;another #?
  121.  bne Cc_slof      ;no, skip (can't happen)
  122.  cmp.b #'b',(a0)  ;go if b
  123.  beq.s Cc_bias
  124.  cmp.b #'p',(a0)+ ;ignore if not ##b or ##p
  125.  bne Cc_slof
  126.  clr.l d4
  127.  cmp.b #'r',(a0)+ ;if ##pr private, else ##p public
  128.  bne Cc_slof
  129.  moveq #-1,d4 ;d4=-1 private
  130.  bra Cc_slof
  131. Cc_bias:
  132.  addq.l #1,a0
  133.  cmp.b #'i',(a0)+ ;##bi=bias, else ignore ##b
  134.  bne Cc_slof
  135.  addq.l #3,a0 ;skip 'as '
  136.  clr.l d5 ;d5 holds new bias
  137.  clr.l d0
  138. Cc_val:
  139.  move.b (a0)+,d0
  140.  sub.b #'0',d0
  141.  bcs.s Cc_neg
  142.  cmp.b #10,d0
  143.  bcc.s Cc_neg
  144.  mulu #10,d5
  145.  add.l d0,d5
  146.  bra Cc_val
  147. Cc_neg:
  148.  neg.l d5
  149.  bra Cc_item
  150. Cc_got:
  151.  tst.l d4
  152.  beq.s Cc_sendr ;cont if public
  153.  sub.l #6,d5
  154.  bra Cc_slof ;else, fix bias & skip
  155. Cc_sendr:
  156.  move.b #'_',(a1)+
  157.  move.b #'L',(a1)+
  158.  move.b #'V',(a1)+
  159.  move.b #'O',(a1)+
  160. Cc_send:
  161.  move.b (a0)+,d0 ;send until eol or (
  162.  cmp.b #$0A,d0
  163.  beq.s Cc_asc
  164.  move.b d0,(a1)+
  165.  cmp.b #'(',d0
  166.  bne Cc_send
  167.  subq.l #1,a1
  168. Cc_slof2:
  169.  cmp.b #$0A,(a0)+
  170.  bne Cc_slof2
  171. Cc_asc:
  172.  move.b #':',(a1)+
  173.  move.b #' ',(a1)+
  174.  move.b #'E',(a1)+
  175.  move.b #'Q',(a1)+
  176.  move.b #'U',(a1)+
  177.  move.b #' ',(a1)+
  178.  move.b #'$',(a1)+
  179.  move.l d5,d0
  180.  move.w #$1000,d1 ;send lsw of bias (in ascii)
  181. Cc_dig:
  182.  moveq #'0'-1,d3
  183. Cc_sub:
  184.  addq.w #1,d3
  185.  cmp.b #'9'+1,d3
  186.  bne.s Cc_cry
  187.  moveq #'A',d3
  188. Cc_cry:
  189.  sub.w d1,d0
  190.  bcc Cc_sub
  191.  add.w d1,d0
  192.  move.b d3,(a1)+
  193.  lsr.w #4,d1
  194.  bne Cc_dig
  195.  move.b #$0A,(a1)+ ;send eol
  196. Cc_down:
  197.  sub.l #6,d5 ;fix bias
  198.  bra Cc_item ;& to next item
  199. Cc_wrap:
  200.  move.l a1,d3 ;d3=outfile size d2=outfile bot
  201.  sub.l d2,d3
  202.  rts
  203.